package com.atguigu.guli.service.edu.service;

import com.atguigu.guli.service.edu.entity.Course;
import com.atguigu.guli.service.edu.entity.form.CourseInfoForm;
import com.atguigu.guli.service.edu.entity.vo.CoursePublishVo;
import com.atguigu.guli.service.edu.entity.vo.CourseQueryVo;
import com.atguigu.guli.service.edu.entity.vo.CourseVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author Helen
 * @since 2020-04-01
 */
public interface CourseService extends IService<Course> {

    /**
     * 功能描述：保存课程和课程详情信息
     *
     * @param courseInfoForm 前端传过来的课程表单
     * @return String 新生成的课程id
     * @author cakin
     * @date 2020/12/5
     */
    String saveCourseInfo(CourseInfoForm courseInfoForm);

    /**
     * 功能描述：根据id获得课程信息
     *
     * @param id 课程id
     * @return CourseInfoForm 课程详情
     * @author cakin
     * @date 2020/12/5
     */
    CourseInfoForm getCourseInfoById(String id);

    /**
     * 功能描述：更新课程和课程详情信息
     *
     * @param courseInfoForm 前端传过来的课程表单
     * @return String 新生成的课程id
     * @author cakin
     * @date 2020/12/5
     */
    void updateCourseInfoById(CourseInfoForm courseInfoForm);

    /**
     * 功能描述：查询课程列表
     *
     * @param page          页码
     * @param limit         每页记录数
     * @param courseQueryVo 查询条件
     * @return IPage<CourseVo> 返回分页
     * @author cakin
     * @date 2020/12/6
     */
    IPage<CourseVo> selectPage(Long page, Long limit, CourseQueryVo courseQueryVo);

    /**
     * 功能描述：删除课程封面
     *
     * @author cakin
     * @date 2020/12/6
     * @param id 课程id
     * @return boolean 是否删除成功
     */
    boolean removeCoverById(String id);

    /**
     * 功能描述：删除课程
     *
     * @author cakin
     * @date 2020/12/6
     * @param id 课程id
     * @return boolean 是否删除成功
     */
    boolean removeCourseById(String id);

    /**
     * 功能描述：根据ID获取课程发布信息
     *
     * @param id 课程id
     * @return CoursePublishVo 课程信息
     * @author cakin
     * @date 2020/12/6
     */
    CoursePublishVo getCoursePublishVoById(String id);

    /**
     * 功能描述：根据id发布课程
     *
     * @param id 课程id
     * @return boolean 是否发布成功
     * @author cakin
     * @date 2020/12/6
     */
    boolean publishCourseById(String id);
}
